package com.nlgc365.designpattern.Chapter04_Pattern.Creation.P01_Singleton.Usage.IDGenerators;

import java.util.concurrent.atomic.AtomicLong;

/**
 * 单例模式-饱汉式
 * 功能: ID自增生成器
 * 存在问题: 并发安全
 */
public class IdGenerator2 {

    private AtomicLong atomicLong = new AtomicLong(0);

    private static IdGenerator2 idGenerator;

    //私有构造函数
    private IdGenerator2() {
    }

    //如果还没有创建实例才创建
    public static IdGenerator2 getInstance() {
        if (idGenerator == null) {//在并发场景下, 这里存在问题, 如果多个线程同时到达该行代码, 那么可能会创建多余一个的实例.
            idGenerator = new IdGenerator2();
        }
        return idGenerator;
    }

    /**
     * 生成自增ID
     *
     * @return 返回ID
     */
    public long getId() {
        return atomicLong.getAndIncrement();
    }
}
